#include <iostream>
#include <vector>

using namespace std;


//int add(int a,int b)
//{
//    return a + b;
//}
//
//int main() {
//
//    int a = 10;
//    int b = 20;
//    int result = add(a,b);
//    std::cout << "result:"<< result << std::endl;
//    return 0;
//}

vector<int> v;

void add(int a){
    v.push_back(a);
}


class User{
public:
    string name;
    int age;
    string sex;

    User()
    {
        std::cout << "User...."<< std::endl;
    }
    User(User &u)
    {
        std::cout << "User copy...."<< std::endl;
    }
    ~User()
    {
        std::cout << "~User...."<< std::endl;
    }

};



int a = 10;


void display(){
    for (int i = 0; i < v.size(); ++i) {
        std::cout << "v["<<i<<"]:"<< v[i] << std::endl;
    }
}

int main() {



    //这种代码当时在讲Class的时候，我讲得是语法声明，
    // 但是从内存角度去考虑问题下面这种玩法是先与堆区构建一组数据，然后再由栈区构建一组数据
    //堆区：先开辟User这个指针然后再开辟 name, age,sex的空间
    //栈区：开辟一个指针，但是内容是存于堆区
    //这里就是一个明显的内存泄漏问题
    //C/C++体系当中内存分配，给了两种策略


    //变量使用的两种策略
    //int //变量
    //int*//指针
    //所有的变量在栈区当中都会生成数据

//    int a ;
//    User u ;
//    char c[10];

    //想要去到堆区，必须要自己主动！
    //new malloc

//    User u = *new User();





    //等价
    User* up = new User();
    User u2 = *up;
    std::cout << "up:"<< &up << std::endl;
    std::cout << "u2:"<< &u2 << std::endl;
//    delete up;
//    std::c    out << "result:"<< &v << std::endl;
    add(10);
    add(20);
    add(30);
    display();
    std::cout << "result:"<< &v << std::endl;
    return 0;
}